package com.headwind.logistics.order.mapper;

import com.headwind.logistics.common.pojo.GoodsIssueType;
import com.headwind.logistics.order.dto.OrderDto;
import com.headwind.logistics.order.entity.Order;
import com.headwind.logistics.order.entity.OrderCargo;
import com.headwind.logistics.order.entity.OrderServiceFee;
import com.headwind.logistics.order.entity.OrderTail;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @Author 盛夏
 * @Date 2020-07-20 上午 9:53
 * @Version 1.0
 * @DESCRIPTION 填写类作用描述
 */
public interface OrderMapper {

    /**
     * 保存订单货物
     * @param orderCargo    货物
     * @return  状态码
     */
    int addOrderCargo(OrderCargo orderCargo);

    /**
     * 保存订单费用
     * @param orderServiceFee   费用数据
     * @return  状态码
     */
    int addOrderService(OrderServiceFee orderServiceFee);

    /**
     * 保存订单
     * @param order  订单对象
     * @return  状态码
     */
    int addOrder(Order order);

    /**
     * 查询所有异常分类
     * @return 异常类型集合
     */
    List<GoodsIssueType> queryGoodsIssueType();

    /**
     * 根据订单编号查订单ID
     * @param orderOdd
     * @return
     */
    Long queryOrderIdByOdd(String orderOdd);

    /**
     * 根据ID修改面单发放记录表
     * @param expressGrantId    面单发放记录主键
     * @return      状态码
     */
    int updateExpressGrantByID(Long expressGrantId);

    /**
     * 根据面单号范围查订单
     * @param expressGrantStartNum  开始单号
     * @param expressGrantEndNum    结束单号
     * @return  订单传输对象类集合
     */
    List<OrderDto> queryOrderByExpressGrantOdd(@Param("expressGrantStartNum") String expressGrantStartNum,
                                               @Param("expressGrantEndNum") String expressGrantEndNum);

    /**
     * 订单分页查询
     * @return
     */
    List<OrderDto> queryOrderByPage(@Param("page") Integer page,@Param("limit") Integer limit,@Param("empId") Long empId);

    /**
     * 查询所有定单数量
     * @return
     */
    int queryOrderCount();

    /**
     * 根据订单号查订单费用
     * @param orderOdd  订单号
     * @return          订单费用
     */
    List<OrderDto> querySeriveFeeByOrderOdd(String orderOdd);


    /**
     * 新增订单事件追踪信息
     * @param orderTail 事件类
     * @return
     */
    int addOrderTail(OrderTail orderTail);


    /**
     * 通过订单编号得到订单主键后查询订单追踪表
     * @param orderOdd  订单编号
     * @return          订单追踪集合
     */
    List<OrderTail>  queryOrderTailByOrderId(String orderOdd);

    /**
     * 根据订单号修改订单状态
     * @param orderOdd  订单号
     * @return
     */
    int updateOrderDele(String orderOdd);

    /**
     * 根据订单号删除订单
     * @param orderOdd  订单号
     * @return
     */
    int deleteOrder(String orderOdd);


    /**
     * 根据订单状态和开始网点查询订单数据
     * @param orderStatus   订单状态
     * @param getId           目的网点
     * @return
     */
    List<OrderDto> queryOrderByStatusAndSetId(@Param("orderStatus") String orderStatus,@Param("getId") String getId);


    /**
     * 修改订单状态和运单外键
     * @return
     */
    int updateOrderStatus();
}
